/*
 *英才会硕信息科技有限公司拥有本软件的版权，拥有本软件版权2025   并保留所有权利。
 *Copyright 2021,YCHS Information&Science Technology Co.,Ltd,
 *All rights reserved.
 */
package com.ychs.lawyerback01.exception;

import com.ychs.lawyerback01.common.R;
import com.ychs.lawyerback01.common.ResultCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.List;
import java.util.stream.Collectors;

/**
 * 全局异常处理器
 * @author xuehongjin
 * @version 1.0
 * @date 2025/8/13
 */
@RestControllerAdvice
@Slf4j
public class GlobalExceptionHandle {

    @ExceptionHandler(BussinessException.class)
    public R<?> handleBussinessException(BussinessException ex){
        // 修改为正确的日志记录方式
        log.warn("业务异常：code={}, message={}", ex.getCode(), ex.getMessage(), ex);
        return R.fail(ex.getCode(), ex.getMessage());
    }

    @ExceptionHandler(Exception.class)
    public R<?> handlerException(Exception e){
        // 修改为正确的日志记录方式，将异常对象作为最后一个参数
        log.error("系统异常：", e);
        return R.fail();
    }

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public R<?> handleMethodArgumentException(MethodArgumentNotValidException ex){
        List<String> errors = ex.getBindingResult().getFieldErrors()
                .stream()
                .map(error -> error.getField() + ":" + error.getDefaultMessage())
                .collect(Collectors.toList());
        // 参数校验异常通常不是系统错误，使用warn级别更合适
        log.warn("参数校验失败：{}", errors, ex);
        return R.fail(ResultCode.PARAMS_ERROR, errors);
    }
    
}